/*
 *
 * 名称：历法
 * 功能：通过rili.cfg文件，计算公历和农历的转换，时间运算
 * 作者：清河张
 * 时间：2025.05.11
 *
 */

#ifndef LIFA_H
#define LIFA_H

#include <QDateTime>
#include "utils.h"
#include "bazi.h"
#include "jie24.h"
#include "shuzi.h"
#include <string>


class LFLOADER
{
public:
    //默认构造函数
    LFLOADER();
    bool loadcfg(const char* file);//加载文件
    QDate nl0togl(const QDate& date);//农阴历转公历
    QDate gltonl0(const QDate &date);//公转农阴
    QDateTime jqtogl(JIE24&);//节气转公历
    JIE24 gltojq(const QDateTime &dateTime);//公转节气
private:
    std::string _db;
};

class LIFA   //历法
{
public:
    enum ZHU{
        KE = 1 << 0,
        SHI = 1 << 1,
        RI = 1 << 2,
        YUE = 1 << 3,
        NIAN = 1 << 4,
    };
    static bool init(const char*);//按文件加载日历
    LIFA();//默认初始化
    static LIFA fromgl(const QDateTime &dateTime);//公转
    static LIFA fromgl(const QDate &date);//公转
    LIFA addDays(int days);//加天数
    LIFA addSecs(int seconds);//加秒钟

    QDateTime dateTime() const;//公历日期时间

    const BAZI& bazi() const;//八字
    const BAZI& tobazi();//转为八字

    const char* jieqiname() const;//节气名
    JIE24 jieqi() const;//节气
    QDate gl() const;//公历
    QTime tm() const;//时间
    QDate nl() const;//农历（阴）
    const char* nlzf(int zhu);//家历字符显示

    int nian360() const;//年
    int sui360() const;//岁
    int syue360() const;//岁月

    qint64 suimiao() const;//岁秒
    qreal jiefen() const;//当前节分，地球公转位置
    int ri360() const;//日数
    int hour360() const;//时数
    int dayun() const;//0-8 => 一至九运

    static QDateTime jq2datetime(JIE24);//节气对应时间

private:
    JIE24 _jq;//节气
    QDate _gl;//公历日期
    QDate _nl;//农历（阴）日期
    QTime _tm;//时间
    BAZI _bz;//八字
    char _buf[256];
    static LFLOADER _lfloader;
};



#endif // LIFA_H
